perm filename WHOPK.SAI[HAK,HPM] blob sn#272878 filedate 1977-03-29 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "WHOPK"
C00006 ENDMK
C⊗;
BEGIN "WHOPK"
SAFE INTEGER ARRAY TIED,UNTIED,LMAP,PRG,TMAP,UMAP['26:'117],WHO[-1:'37];
INTEGER UNTI,TEMP,I,J,L,NJOB;
INTEGER JOBN,JBTLIN,PRJPRG,NOUT; STRING OUTS;
require "outdd.rel[s,pmf]" load_module;
external procedure outdd(string s; INTEGER SPOS(2), PPOS(-1));

OUTSTR("Exit
↑C
.");

CALL(CVSIX("COPY"),"SETNAM");

JOBN←CALL('222,"PEEK");
JBTLIN←CALL('236,"PEEK");
PRJPRG←CALL('211,"PEEK");

WHILE TRUE DO
   BEGIN

   FOR J←1 STEP 1 UNTIL JOBN DO
      BEGIN
      L←CALL(JBTLIN+J,"PEEK") LAND '777777;
      IF L≥'26 ∧ L≤'117 THEN
         BEGIN LMAP[L]←J; PRG[L]←CALL(PRJPRG+J,"PEEK") LAND '777777; END;
      END;

   FOR L←'26 STEP 1 UNTIL '117 DO
       BEGIN
       TIED[L]←CALL(('5000 LOR L) LSH 18,"VDSMAP") LAND '777777;
	  comment 0 if untied, 400000,,0 if untied but resetable, or line number;
       TEMP←CALL(('000000 LOR L) LSH 18,"VDSMAP");
       UNTI←CALL(('200000 LOR L) LSH 18,"VDSMAP");
       UMAP[L]←TMAP[L]←-1;
       FOR I←0 STEP 1 UNTIL '37 DO
          BEGIN
          IF UNTI LAND ('400000000000 LSH -I) THEN UMAP[L]←I;
          IF TEMP LAND ('400000000000 LSH -I) THEN TMAP[L]←I;
          END;
       WHO[TMAP[L]]←L;
       END;

   FOR L←'26 STEP 1 UNTIL '117 DO
   IF UMAP[L]≠'11 ∧ UMAP[L]≠-1 ∧ TMAP[L]≠UMAP[L] THEN UNTIED[L]←WHO[UMAP[L]]
   ELSE UNTIED[L]←L;

   OUTS←('15&'12); NOUT←1;
   FOR L←'26 STEP 1 UNTIL '117 DO
       BEGIN
       IF (TIED[L]≠0∧TIED[L]≠L∧PRG[L]≠PRG[TIED[L]]) ∨
          (UNTIED[L]≠0∧UNTIED[L]≠L∧PRG[L]≠PRG[UNTIED[L]]) THEN
	   BEGIN
           NOUT←NOUT+1;
	   OUTS←OUTS&("tty"&CVOS(L)&
                  (IF PRG[L]≠0 THEN "-"&CVXSTR(PRG[L])[4 to 6] ELSE "")
                  &" watches");
	   IF TIED[L]≠0∧TIED[L]≠L∧PRG[L]≠PRG[TIED[L]] THEN
           OUTS←OUTS&(" tty"&CVOS(TIED[L])&
                  (IF PRG[TIED[L]]≠0 THEN "-"&CVXSTR(PRG[TIED[L]])[4 TO 6] ELSE "")
                  ) ELSE
	   IF UNTIED[L]≠0∧UNTIED[L]≠L∧PRG[L]≠PRG[UNTIED[L]] THEN
           OUTS←OUTS&(" tty"&CVOS(UNTIED[L])&
                  (IF PRG[UNTIED[L]]≠0 THEN "-"&
                   CVXSTR(PRG[UNTIED[L]])[4 TO 6] ELSE "")
                  );
	   OUTS←OUTS&('15&'12);
	   END;
       END;
    WHILE (NOUT MOD 4)≠0 DO BEGIN OUTS←OUTS&" "&'15&'12; NOUT←NOUT+1; END;
    OUTDD(OUTS);
    IF INCHRS≠-1 THEN CALL(0,"EXIT");
    CALL(25,"SLEEP");
    END;
END;